home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
msysjour
/
vol06
/
03
/
postman
/
postman1.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-01
|
3KB
|
110 lines
#include <windows.h>
#include "postman1.h"
struct
{
BOOL bColor;
int nWindows,
nLevel;
HWINFO hWinfo;
LPWINFO lpWinfo;
} ListStats = {FALSE, 0, 0, NULL, 0L};
static void winlist_enum (HWND hwnd);
static void winlist_count (HWND hwnd);
void winlist_enumAll (HWND hwnd)
{
HWND hwndFirst = GetWindow (hwnd, GW_HWNDFIRST);
ListStats.nWindows = 0;
ListStats.nLevel = 0;
ListStats.bColor = FALSE;
winlist_count (hwndFirst);
if (ListStats.hWinfo) GlobalFree (ListStats.hWinfo);
ListStats.hWinfo = (HWINFO) GlobalAlloc (GMEM_MOVEABLE, ListStats.nWindows*sizeof(WINFO));
ListStats.lpWinfo = (LPWINFO) GlobalLock (ListStats.hWinfo);
winlist_enum (hwndFirst);
GlobalUnlock (ListStats.hWinfo);
}
static void winlist_count (HWND hwnd)
{
HWND hwndChild,
hwndSibling;
ListStats.nWindows++;
if (hwndChild = GetWindow (hwnd, GW_CHILD)) // count children
winlist_count (hwndChild);
if (hwndSibling = GetWindow(hwnd, GW_HWNDNEXT)) // count siblings
winlist_count (hwndSibling);
}
static void winlist_enum (HWND hwnd)
{
HWND hwndChild,
hwndSibling;
int nLength;
GetClassName (hwnd, ListStats.lpWinfo->szClassName, CLASSNAMEMAX);
ListStats.lpWinfo->szClassName [CLASSNAMEMAX - 1] = '\0';
nLength = GetWindowText (hwnd, ListStats.lpWinfo->szTitle, WINDOWTITLEMAX);
ListStats.lpWinfo->szTitle [nLength] = '\0';
ListStats.lpWinfo->hwnd = hwnd;
ListStats.lpWinfo->hwndParent = GetParent (hwnd);
ListStats.lpWinfo->dwStyle = GetWindowLong (hwnd, GWL_STYLE);
ListStats.lpWinfo->bColor = ListStats.bColor ;
ListStats.lpWinfo->nLevel = ListStats.nLevel ;
ListStats.lpWinfo->hIcon = GetClassWord (hwnd, GCW_HICON) ;
ListStats.lpWinfo++;
if (hwndChild = GetWindow (hwnd, GW_CHILD)) // enum children
{
ListStats.nLevel++;
winlist_enum (hwndChild);
}
if (hwndSibling = GetWindow (hwnd, GW_HWNDNEXT)) // enum siblings
{
if (GetWindowTask (hwndSibling) != GetWindowTask (hwnd))
{
ListStats.bColor = !ListStats.bColor;
}
winlist_enum (hwndSibling);
}
else
{
ListStats.nLevel--;
}
}
int winlist_getCount ()
{
return ListStats.nWindows;
}
HWINFO winlist_getWinfo ()
{
return ListStats.hWinfo;
}
void winlist_destroy ()
{
GlobalFree (ListStats.hWinfo);
}